/*
* To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ucb.sispro.model;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Transient;


import com.sun.istack.internal.NotNull;





/**
 *
 * @author felipe
 */
@Entity
@Table(name = "estabelecimento")
@NamedQueries({
    @NamedQuery(name = "Estabelecimento.findAll", query = "SELECT e FROM Estabelecimento e"),
    @NamedQuery(name = "Estabelecimento.findByIdEstabelecimento", query = "SELECT e FROM Estabelecimento e WHERE e.idEstabelecimento = :idEstabelecimento"),
    @NamedQuery(name = "Estabelecimento.findByCnpj", query = "SELECT e FROM Estabelecimento e WHERE e.cnpj = :cnpj"),
    @NamedQuery(name = "Estabelecimento.findByNome", query = "SELECT e FROM Estabelecimento e WHERE e.nome = :nome"),
    @NamedQuery(name = "Estabelecimento.findBySePossuiEntrega", query = "SELECT e FROM Estabelecimento e WHERE e.sePossuiEntrega = :sePossuiEntrega"),
    @NamedQuery(name = "Estabelecimento.findByAtivo", query = "SELECT e FROM Estabelecimento e WHERE e.ativo = :ativo"),
    @NamedQuery(name = "Estabelecimento.findByEmail", query = "SELECT e FROM Estabelecimento e WHERE e.email = :email")})
public class Estabelecimento  extends br.ucb.sispro.model.Entity implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "idEstabelecimento")
    private long idEstabelecimento;
    @Basic(optional = false)
    @Column(name = "CNPJ")
    private String cnpj;
    @Basic(optional = false)
    @Column(name = "nome")
    private String nome;
    @Basic(optional = false)
    @Column(name = "sePossuiEntrega")
    private String sePossuiEntrega;
    @Basic(optional = false)
    @Column(name = "ativo")
    private String ativo;
    @Basic(optional = false)
    @Column(name = "email")
    private String email;
    @JoinTable(name = "estabelecimento_has_diahoraentrega", joinColumns = {
        @JoinColumn(name = "Estabelecimento_idEstabelecimento", referencedColumnName = "idEstabelecimento")}, inverseJoinColumns = {
        @JoinColumn(name = "DiaHoraEntrega_idDiaHoraEntrega", referencedColumnName = "idDiaHoraEntrega")})
    @ManyToMany
    private List<DiaHoraEntrega> diaHoraEntregaList;
    @ManyToMany(mappedBy = "estabelecimentoList")
    private List<PerguntaAvaliacao> perguntaAvaliacaoList;
    @JoinTable(name = "estabelecimentopublicoalvo", joinColumns = {
        @JoinColumn(name = "Estabelecimento_idEstabelecimento", referencedColumnName = "idEstabelecimento")}, inverseJoinColumns = {
        @JoinColumn(name = "PublicoAlvo_idPublicoAlvo", referencedColumnName = "idPublicoAlvo")})
    @ManyToMany
    private List<PublicoAlvo> publicoAlvoList;
    @JoinTable(name = "estabelecimentocidadeentrega", joinColumns = {
        @JoinColumn(name = "Estabelecimento_idEstabelecimento", referencedColumnName = "idEstabelecimento")}, inverseJoinColumns = {
        @JoinColumn(name = "CidadeEntrega_idCidadeEntrega", referencedColumnName = "idCidadeEntrega")})
    @ManyToMany
    private List<CidadeEntrega> cidadeEntregaList;
    @JoinTable(name = "estabelecimentotipocomida", joinColumns = {
        @JoinColumn(name = "Estabelecimento_idEstabelecimento", referencedColumnName = "idEstabelecimento")}, inverseJoinColumns = {
        @JoinColumn(name = "TipoComida_idTipoComida", referencedColumnName = "idTipoComida")})
    @ManyToMany
    private List<TipoComida> tipoComidaList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "estabelecimentoidEstabelecimento")
    private List<Pedido> pedidoList;
    @JoinColumn(name = "Usuario_idUsuario", referencedColumnName = "idUsuario")
    @ManyToOne(optional = true,targetEntity=Usuario.class)
    private Usuario usuarioidUsuario;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "estabelecimentoidEstabelecimento")
    private List<CategoriaDeCardapio> categoriaDeCardapioList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "estabelecimentoidEstabelecimento")
    private List<Gerente> gerenteList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "estabelecimentoidEstabelecimento")
    private List<Avaliacao> avaliacaoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "estabelecimentoidEstabelecimento")
    private List<Taxas> taxasList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "estabelecimentoidEstabelecimento",fetch=FetchType.EAGER)
    private List<EnderecoEstabelecimento> enderecoEstabelecimentoList;
    
    @Transient
    private boolean aprovado=true;
    
    public Estabelecimento() {
    }

    public Estabelecimento(Integer idEstabelecimento) {
        this.idEstabelecimento = idEstabelecimento;
    }

    public Estabelecimento(Integer idEstabelecimento, String cnpj, String nome, String sePossuiEntrega, String ativo, String email) {
        this.idEstabelecimento = idEstabelecimento;
        this.cnpj = cnpj;
        this.nome = nome;
        this.sePossuiEntrega = sePossuiEntrega;
        this.ativo = ativo;
        this.email = email;
    }

    public long getIdEstabelecimento() {
        return idEstabelecimento;
    }

    public void setIdEstabelecimento(long idEstabelecimento) {
        this.idEstabelecimento = idEstabelecimento;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getSePossuiEntrega() {
        return sePossuiEntrega;
    }

    public void setSePossuiEntrega(String sePossuiEntrega) {
        this.sePossuiEntrega = sePossuiEntrega;
    }

    public String getAtivo() {
        return ativo;
    }

    public void setAtivo(String ativo) {
        this.ativo = ativo;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List<DiaHoraEntrega> getDiaHoraEntregaList() {
        return diaHoraEntregaList;
    }

    public void setDiaHoraEntregaList(List<DiaHoraEntrega> diaHoraEntregaList) {
        this.diaHoraEntregaList = diaHoraEntregaList;
    }

    public List<PerguntaAvaliacao> getPerguntaAvaliacaoList() {
        return perguntaAvaliacaoList;
    }

    public void setPerguntaAvaliacaoList(List<PerguntaAvaliacao> perguntaAvaliacaoList) {
        this.perguntaAvaliacaoList = perguntaAvaliacaoList;
    }

    public List<PublicoAlvo> getPublicoAlvoList() {
        return publicoAlvoList;
    }

    public void setPublicoAlvoList(List<PublicoAlvo> publicoAlvoList) {
        this.publicoAlvoList = publicoAlvoList;
    }

    public List<CidadeEntrega> getCidadeEntregaList() {
        return cidadeEntregaList;
    }

    public void setCidadeEntregaList(List<CidadeEntrega> cidadeEntregaList) {
        this.cidadeEntregaList = cidadeEntregaList;
    }

    public List<TipoComida> getTipoComidaList() {
        return tipoComidaList;
    }

    public void setTipoComidaList(List<TipoComida> tipoComidaList) {
        this.tipoComidaList = tipoComidaList;
    }

    public List<Pedido> getPedidoList() {
        return pedidoList;
    }

    public void setPedidoList(List<Pedido> pedidoList) {
        this.pedidoList = pedidoList;
    }

    public Usuario getUsuarioidUsuario() {
        return usuarioidUsuario;
    }

    public void setUsuarioidUsuario(Usuario usuarioidUsuario) {
        this.usuarioidUsuario = usuarioidUsuario;
    }

    public List<CategoriaDeCardapio> getCategoriaDeCardapioList() {
        return categoriaDeCardapioList;
    }

    public void setCategoriaDeCardapioList(List<CategoriaDeCardapio> categoriaDeCardapioList) {
        this.categoriaDeCardapioList = categoriaDeCardapioList;
    }

    public List<Gerente> getGerenteList() {
        return gerenteList;
    }

    public void setGerenteList(List<Gerente> gerenteList) {
        this.gerenteList = gerenteList;
    }

    public List<Avaliacao> getAvaliacaoList() {
        return avaliacaoList;
    }

    public void setAvaliacaoList(List<Avaliacao> avaliacaoList) {
        this.avaliacaoList = avaliacaoList;
    }

    public List<Taxas> getTaxasList() {
        return taxasList;
    }

    public void setTaxasList(List<Taxas> taxasList) {
        this.taxasList = taxasList;
    }

    public List<EnderecoEstabelecimento> getEnderecoEstabelecimentoList() {
        return enderecoEstabelecimentoList;
    }

    public void setEnderecoEstabelecimentoList(List<EnderecoEstabelecimento> enderecoEstabelecimentoList) {
        this.enderecoEstabelecimentoList = enderecoEstabelecimentoList;
    }

    @Override
    public String toString() {
        return "br.ucb.sispro.model.Estabelecimento[ idEstabelecimento=" + idEstabelecimento + " ]";
    }

	@Override
	public String getNameForMessages() {
		// TODO Auto-generated method stub
		return "messagesEstabelecimento";
	}

	@Override
	public long getId() {
		// TODO Auto-generated method stub
		return getIdEstabelecimento();
	}

	@Override
	public String getSearchComlumnTable() {
		// TODO Auto-generated method stub
		return "cnpj";
	}

	@Override
	public String getSearchComlumnEntity() {
		// TODO Auto-generated method stub
		return "cnpj";
	}

	public boolean isAprovado() {
		return aprovado;
	}

	public void setAprovado(boolean aprovado) {
		this.aprovado = aprovado;
	}
	
    
}
